Loading...
 

Wyprowadzenie układu równań liniowych

Problem doboru współczynników kombinacji liniowej funkcji B-spline służących do aproksymacji bitmapy (problem skalowania poszczególnych B-spline'ów) jest problemem globalnym, i należy rozwiązać go biorąc pod uwagę wszystkie współczynniki równocześnie.
W tym celu przeprowadzamy następujące rozumowanie, które jest podstawą intuicji leżących u podstaw metody elementów skończonych.


Celem naszym jest wykonanie aproksymacji bitmapy za pomocą smukłej funkcji \( u \)
\( \color{red}{u(x,y)} \approx BITMAP(x,y) \)
Nasza smukła funkcja \( u \) powstaje poprzez kombinację liniową wielu funkcji bazowych
\( u(x,y) = \sum_{i=1,j=1}^{N_x,N_y} u_{i,j} B^x_{i}(x) B^y_{j}(y) \) gdzie \( u(x,y) = _{j}(y) \) to współczynniki tej kombinacji, których wartości musimy policzyć.
Nasze funkcje bazowe rozpięte są na \( N_x*N_y \) elementach siatki. Funkcji tych jest więc również \( N_x*N_y \), i w związku z powyższym musimy obliczyć \( N_x*N_y \) współczynników \( u_{i,j} \). Każdy z tych współczynników \( u_{i,j} \) mówi mi jak przeskalować jedną funkcję bazową, dwuwymiarową funkcję B-spline \( B_{i,j;2}(x,y)=B^x_{i}(x) B^y_{j}(y) \).
W jaki sposób obliczyć te współczynniki
\( \{u_{i,j}\}i=1,..,N_x;j=1,...,N_y \).
Zamiast wybierać wartości pikseli, użyjemy metody uśredniania. Do uśredniania zastosujemy również nasze funkcje bazowe B-spline. Chcemy aby nasza aproksymacja przybliżała bitmapę \( u(x,y) \approx BITMAP(x,y) \).
Wybierzmy więc dowolnie jedną funkcję B-spline
\( v(x,y)=B_{k,l;2}(x,y)=B^x_{k}B^y_{l} \). Wybraliśmy funkcję o indeksach \( k,l \). Dla uproszczenia nazwaliśmy ją \( v \).
Trzy przykładowe wybory naszej funkcji B-spline zilustrowane są na rysunku . Funkcję tą nazwiemy funkcją testującą. Jest to standardowa nomenklatura używana w metodzie elementów skończonych.
Następnie użyjemy naszej funkcji testującej w celu obliczenia średniej z bitmapy w otoczeniu tej funkcji.
Innymi słowy chcemy żeby nasza aproksymacja \( u \) przybliżała naszą bitmapę z takim rozkładem uśredniania jaki daje nam nasza funkcja testująca. Żeby zapisać tą operację matematycznie, przemnożymy nasze równania aproksymacji przez funkcję testującą i policzymy całkę
\( \int_{\Omega} u(x,y) v(x,y) = \int_{\Omega} BITMAP(x,y) v(x,y) \).
Największy wpływ na wartość tej średniej, zgodnie z wyglądem funkcji bazowej B-spline, ma punkt centralny, a punkty coraz bardziej oddalone mają coraz mniejszy wpływ na wartość średniej.
Zauważmy teraz że jeden wybór funkcji testującej \( v \) daje nam jedno równanie.
Na ile sposobów możemy wybrać nasze funkcje testujące? Skoro każda z nich jest B-spline'm skojarzonym z centrum elementu, a elementów jest \( N_x*N_y \) oznacza to że możemy wybrać \( N_x*N_y \) funkcji testujących.
Każdy z takich wyborów funkcji testujących daje nam jedno równanie, dostajemy więc układ \( N_x*N_y \) równań
\( \int u(x,y) \color{blue}{B^x_1(x)B^y_1(y)} = \int BITMAP(x,y) \color{blue}{B^x_1(x)B^y_1(y)} \)
\( \int u(x,y) \color{blue}{B^x_1(x)B^y_2(y) } = \int BITMAP(x,y) \color{blue}{B^x_1(x)B^y_2(y)} \)
\( \vdots \)
\( \int u(x,y) \color{blue}{B^x_k(x)B^y_l(y)} = \int BITMAP(x,y) \color{blue}{B^x_k(x)B^y_l(y)} \)
\( \vdots \)
\( \int u(x,y) \color{blue}{B^x_{N_x}(x)B^y_{N_y-1}(y)} = \int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)B^y_{N_y-1}(y)} \)
\( \int u(x,y) \color{blue}{B^x_{N_x}(x)B^y_{N_y}(y)} = \int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)B^y_{N_y}(y)}. \)
Pytanie, które należy teraz zadać, to kwestia niewiadomych w naszym układzie równań. Mamy \( N_x*N_y \) równań, ale gdzie znajdują się niewiadome? Czym są niewiadome w naszym układzie równań? Żeby dotrzeć do niewiadomych, należy przypomnieć sobie jak skonstruowana została nasza funkcja \( u \) aproksymująca bitmapę.
\( \color{red}{u(x,y) \approx \sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y)} \)
Nasze niewiadome to współczynniki \( \{u_{i,j}\}i=1,...,N_x,j=1,...,N_y \)
określające w jaki sposób "wyciągamy" poszczególne B-spline "pagórki" w celu uzyskania jak najlepszej aproksymacji bitmapy.
Wstawiamy więc naszą kombinację liniową funkcji B-spline w miejsce \( u \) in dostajemy

\( \int \color{red}{\sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_1(x)*B^y_1(y)} = \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_1(y)} \)

\( \int \color{red}{\sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_1(x)*B^y_2(y)} = \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_2(y)} \)

\( \vdots \)

\( \int \color{red}{\sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y) } \color{blue}{B^x_k(x)*B^y_l(y)} = \int BITMAP(x,y) \color{blue}{B^x_k(x)*B^y_l(y) } \)

\( \vdots \)

\( \int \color{red}{\sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_{N_x}(x)*B^y_{N_y-1}(y)} = \int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)*B^y_{N_y-1}(y)} \)

\( \int \color{red}{\sum_{i,j} u_{i,j} B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_{N_x}(x)*B^y_{N_y}(y)} =\int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)*B^y_{N_y}(y)} \)

Korzystamy teraz z algebraicznej właściwości układu równań, która to pozwala nam wyciągnąć sumę wraz ze współczynnikami przed poszczególne całki

\( \color{red}{ \sum_{i,j} u_{i,j}} \int \color{red}{B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_1(x)*B^y_1(y)} = \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_1(y) } \)

\( \color{red}{\sum_{i,j} u_{i,j}} \int \color{red}{B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_1(x)*B^y_2(y) } = \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_2(y) } \)

\( \vdots \)

\( \color{red}{\sum_{i,j} u_{i,j}} \int \color{red}{B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_k(x)*B^y_l(y) } = \int BITMAP(x,y) \color{blue}{B^x_k(x)*B^y_l(y)} \)

\( \vdots \)

\( \color{red}{\sum_{i,j} u_{i,j}} \int \color{red}{B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_{N_x}(x)*B^y_{N_y-1}(y)} = \int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)*B^y_{N_y-1}(y)} \)

\( \color{red}{\sum_{i,j} u_{i,j}} \int \color{red}{B^x_{i}(x) B^y_{j}(y)} \color{blue}{B^x_{N_x}(x)*B^y_{N_y}(y)} =\int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)*B^y_{N_y}(y)} \)

Zauważmy teraz iż powyższy układ równań można zapisać w postaci macierzowej.
W szczególności zaznaczone w kolorze czerwonym współczynniki \( \color{red}{u_i,j} \) tworzą wektor niewiadomych, całki \( \int \color{red}{B^x_{i}(x) B^y_{j}(y)}\color{blue}{B^x_k(x)*B^y_l(y)} dx \) tworzą macierz, której wiersze numerowane są od \( i=1,...,N_x; j=1,...,N_y \) , a kolumny od \( k=1,...,N_x; l=1,...,N_y \). Jest tak ponieważ całki zawierają iloczyny dwóch dwuwymiarowych funkcji B-spline, dwóch "pagórków" rozpiętych na siatce elementów skończonych. Pierwsza funkcja B-spline, zaznaczona kolorem czarnym, używana jest do aproksymacji, natomiast druga funkcja B-spline, zaznaczona kolorem niebieskim, używana jest do próbkowania bitmapy (do liczenia średniej z bitmapy). Wektorem prawej strony jest wektor całek, w których to bitmapa jest przemnażana przez "niebieskiego" B-spline'a testującego używanego do uśredniania, i odcałkowywana zgodnie z rozkładem opisanym przez naszego testującego B-spline'a.
Podsumowując, uzyskaliśmy w ten sposób następujący układ równań, w którym niewiadome to współczynniki \( \color{red}{\{u_{i,j}\}i=1,...,N_x;j=1,...N_y} \)
\( \begin{bmatrix} \int{\color{red}{B^x_{1,p}B^y_{1,p}}}\color{blue}{B^x_{1,p}B^y_{1,p}} & \int{\color{red}{B^x_{1,p}B^y_{1,p}}}\color{blue}{B^x_{2,p}B^y_{1,p}} & \cdots & \int{\color{red}{B^x_{1,p}B^y_{1,p}}}\color{blue}{B^x_{N_x,p}B^y_{N_y,p}} \\ \int{\color{red}{B^x_{2,p}B^y_{1,p}}}\color{blue}{B^x_{1,p}B^y_{1,p}} & \int{\color{red}{B^x_{2,p}B^y_{1,p}}}\color{blue}{B^x_{2,p}B^y_{1,p}} & \cdots & \int{\color{red}{B^x_{2,p}B^y_{1,p}}}\color{blue}{B^x_{N_x,p}B^y_{N_y,p}} \\ \vdots & \vdots & \vdots & \vdots \\ \int{\color{red}{B^x_{N_x,p}B^y_{N_y,p}}}\color{blue}{B^x_{1,p}B^y_{1,p}} & \int{\color{red}{B^x_{N_x,p}B^y_{N_y,p}}}\color{blue}{B^x_{2,p}B^y_{1,p}} & \cdots & \int{\color{red}{B^x_{N_x,p}B^y_{N_y,p}}}\color{blue}{B^x_{N_x,p}B^y_{N_y,p}} \\ \end{bmatrix} \begin{bmatrix} \color{red}{u_{1,1}} \\ \color{red}{u_{2,1}} \\ \color{red}{\vdots} \\ \color{red}{u_{N_x,N_y}}\\ \end{bmatrix} \)
\( = \begin{bmatrix} \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_1(y)} dx \\ \int BITMAP(x,y) \color{blue}{B^x_1(x)*B^y_2(y)} dx \\ \vdots \\ \int BITMAP(x,y) \color{blue}{B^x_{N_x}(x)*B^y_{N_y}(y) } dx \\ \end{bmatrix} \)
W "magiczny" sposób rozwiązanie powyższego układu równań da nam najlepsze współczynniki przybliżenia bitmapy poprzez nasze B-spline'y.
Wspomniana "magia" wynika tutaj ze sposobu określania poszczególnych równań naszego układu, w którym to postulowaliśmy iż średnio, w sensie rozkładu określonego funkcjami testującymi B-spline, nasza aproksymacja odpowiadać będzie bitmapie.


Ostatnio zmieniona Czwartek 10 z Marzec, 2022 10:21:51 UTC Autor: Maciej Paszynski
Zaloguj się/Zarejestruj w OPEN AGH e-podręczniki
Czy masz już hasło?

Hasło powinno mieć przynajmniej 8 znaków, litery i cyfry oraz co najmniej jeden znak specjalny.

Przypominanie hasła

Wprowadź swój adres e-mail, abyśmy mogli przesłać Ci informację o nowym haśle.
Dziękujemy za rejestrację!
Na wskazany w rejestracji adres został wysłany e-mail z linkiem aktywacyjnym.
Wprowadzone hasło/login są błędne.